package com.xiangge.array;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class ArrayTest2 {
    public static void main(String[] args) {
/*
    有一个数组，其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。
    要求：把数字放入数组序列中，生成一个新的数组，并且数组的元素依旧是从小到大排列的。执行效果如下：
    请输入一个整数数字：
    50
    生成的新数组是：12 14 23 45 50 66 68 70 77 90
*/
        // 准备一个数组
        int[] arr = {12, 14, 23, 45, 50, 66, 68, 70, 77, 90};
        // 键盘录入一个int类型的整数
        System.out.println("输入一个整数：");
        int n = new Scanner(System.in).nextInt();
        // 假设n的索引index为-1
        int index = -1;
        // for循环遍历数组，在数组arr中找到第一个比n大的元素的索引
        for (int i = 0; i < arr.length; i++) {
            // 使用if单选结构判断,当出现第一个比n大的数时，将它的索引赋给index
            if (n < arr[i]){
                index = i;
                break;
            }
        }
        // 创建一个新数组newArr，新数组的长度为arr.length+1
        int[] newArr = new int[arr.length+1];
        // for循环遍历新数组，将index之前的元素按位录入
        for (int j = 0; j < index; j++) {
            newArr[j] = arr[j];
        }
        // 再用for循环遍历余下的部分，将其按照index+1录入后一位
        for (int k = index + 1; k < newArr.length; k++) {
            newArr[k] = arr[k - 1];
        }
        // 最后再将index位置的元素改为n
        newArr[index] = n;
        System.out.println(Arrays.toString(newArr));
    }
    public static void main5(String[] args) {
        /*
        定义一个数组来存储10个学生的成绩，例如：{72, 89, 65, 87, 91, 82, 71, 93, 76, 68}。计算并输出学生的平均成绩。
        */
        // 使用Random来生成随机数
        Random random = new Random();
        // 创建一个长度为10的数组来储存元素
        int[] arr = new int[10];
        // 使用for循环来遍历数组，让随机数赋值为数组元素
        for (int i = 0; i < arr.length; i++) {
            // 在每一次循环中，生成一个随机数
            int num = random.nextInt(100);
            arr[i] = num;
        }
        // 定义一个double类型的变量来定义平均值
        double avg = 0;
        int sum = 0;
        // 再次使用for循环，将每个元素遍历
        for (int i = 0; i < arr.length; i++) {
            // 先求出所有元素的和
            sum += arr[i];
        }
        // 求平均值
        avg = sum / 10;
        System.out.println("十位学生成绩的平均数为：" + avg);
    }
    public static void main4(String[] args) {
        /*
        现有一个整数数组，数组中的每个元素都是[0-9]之间的数字，从数组的最大索引位置开始到最小索引位置，依次表示整数的个位、十位、百位。。。依次类推。
        请编写程序计算，这个数组所表示的整数值。例如：
        数组：{2, 1, 3, 5, 4}
        表示的整数为：21354 // 注：是整数类型的两万一千三百五十四，不是字符串拼起来的。
        */
        // 创建一个数组
        int[] arr = {2, 4, 1, 9, 3};
        int bit = 0;
        // 使用for循环从大到小遍历一遍数组
        for (int i = 0; i < arr.length; i++) {
            bit = bit * 10 + arr[i];
        }
        System.out.println(bit);
    }
    public static void main3(String[] args) {
        /*
        创建一个长度为6的整数数组。请编写代码，随机生成六个0（包含）-100（不包含）之间的整数存放到数组中，然后计算出数组中所有元素的和并打印。
        */
        // 使用Random生成随机数
        Random random = new Random();
        // 要将生成的随机数放入数组中，先建立一个长度为6的数组
        int[] arr = new int[6];
        // 使用for循环，利用索引将每个元素替换成生成的随机数
        int i;
        for (i = 0; i < arr.length; i++) {
            // 在循环内部进行随机数的循环
            int num = random.nextInt(100);
            arr[i] = num;
        }
        // 定义一个int类型变量
        int sum = 0;
        // 使用for循环，将赋值后的数组遍历并相加
        for (i = 0; i < arr.length; i++) {
            // 要计算所有随机数的和
            sum += arr[i];
        }
        // 使用Arrays方法可以将arr数组的元素显示出来
        System.out.println(Arrays.toString(arr));
        // 输出最后的和
        System.out.println(sum);
    }
    public static void main2(String[] args) {
        /*现有一个小数数组{12.9, 53.54, 75.0, 99.1, 3.14}。请编写代码，找出数组中的最小值并打印。*/
        // 创建一个double类型的数组
        double[] arr = {12.9, 53.54, 75.0, 99.1, 3.14};
        // 在定义一个double类型的变量，假设这个变量n就为最小值
        double n = 100.0;
        // 使用for循环将n和每一个元素进行比较
        for (int i = 0; i < arr.length; i++) {
            // 再使用if单选结构进行比较
            if (n >= arr[i]){
                n = arr[i];
            }
        }
        System.out.println(n);
    }
    public static void main1(String[] args) {
        /*
        请创建一个长度为6的整数数组，并为数组中的元素赋值。遍历数组，打印所有元素，元素之间用空格隔开。比如：
        数组为：{1,2,3,4,5}
        打印结果：1 2 3 4 5
*/
        // 创建一个长度为6的数组，定义为int类型
        int[] arr = new int[6];
        int i = 0;
        // 使用for循环来遍历数组中的元素，并为这些元素赋值
        // 用i来代表arr数组中的索引
        for (i = 0; i < arr.length; i++) {
            // 键盘录入元素值，创建Scanner对像
            System.out.println("请输入第" + (i+1) + "个元素值：");
            arr[i] = new Scanner(System.in).nextInt();
            /*这里可以拆开
            int num = new Scanner(System.in).nextInt();
            arr[i] = num;*/
        }
        // 在循环外输出最终结果
        System.out.println(Arrays.toString(arr) + " ");
    }
}
